// import Service from '../core/baseService';
//
// const uid = require('uid');
// const axios = require('axios');
// const https = require('https');
// const crypto = require('crypto');
// const moment = require('moment');
// const xml2js = require('xml2js');
//
// const xmlParse = xml2js.parseString;
// const xmlParseSetting = {explicitArray: false, ignoreAttrs: true};
// const xmlBuild = new xml2js.Builder({
//     rootName: 'xml',
//     cdata: true,
//     headless: true,
//     renderOpts: {indent: ' ', pretty: 'true'}
// });
//
// const isSet = v => v !== undefined && v !== '';
//
// function genSign(options, key) {
//
//     const source = {
//         ...options
//     };
//
//     delete source.sign;
//
//     //生成调用接口签名
//
//     let signSource = Object.keys(source)
//         .filter(key => isSet(source[key]))
//         .sort()
//         .map(key => `${key}=${source[key]}`);
//
//     signSource.push(`key=${key}`);
//     let signString = signSource.join('&');
//
//     let md5 = crypto.createHash('md5');
//     md5.update(signString);
//     let sign = md5.digest('hex').toUpperCase();
//
//     return sign;
// }
//
//
// export default class OrderService extends Service {
//
//     async xmlParse(xml) {
//         return new Promise(resolve => {
//             xmlParse(xml, xmlParseSetting, (err, result) => {
//                 if (err) {
//                     throw new Error(JSON.stringify(err));
//                 }
//                 resolve(result.xml);
//
//             });
//         })
//     }
//
//     async weixinRefund(appId, params) {
//         let wxapp = await this.ctx.model.WxApp.findOne({ where: { app_id: appId } });
//
//         if (!wxapp || !wxapp.wechat_pay) {
//             throw new Error("未配置微信支付");
//         }
//
//         let config = wxapp.wechat_pay;
//
//         if (config && typeof config === "string") {
//             config = JSON.parse(config);
//         }
//         if (!config.mch_id) {
//             throw new Error("未配置微信支付");
//         }
//
//         let opt = {
//             mch_id: config.mch_id,
//             nonce_str: uid(),
//             out_trade_no: params.out_trade_no,
//             out_refund_no: params.out_refund_no,
//             total_fee: params.total_fee,
//             refund_fee: params.refund_fee,
//             notify_url: config.refund_notify_url,
//             refund_desc: params.refund_desc //退款原因
//         };
//
//         if (config.type === 2) {
//             //特约商户支付参数
//             opt = Object.assign(opt, {
//                 appid: config.mch_appid,
//                 sub_appid: wxapp.app_id,
//                 sub_mch_id: config.sub_mch_id,
//             });
//         } else {
//             //直联商户支付参数
//             opt = Object.assign(opt, {
//                 appid: wxapp.app_id,
//             });
//         }
//
//         //生成调用接口签名
//         opt.sign = genSign(opt, config.mch_key);
//         //生成xml
//         let xml = xmlBuild.buildObject(opt);
//         //console.log('xml', xml);
//
//         let result = await axios.post(`https://api.mch.weixin.qq.com/secapi/pay/refund`, xml, {
//             headers: { 'Content-Type': 'text/xml' },
//             httpsAgent: new https.Agent({
//                 rejectUnauthorized: false,
//                 pfx: Buffer.from(config.pfx, "base64"),
//                 passphrase: config.mch_id
//             }),
//         });
//
//         if (result.status === 200) {
//             result = await this.xmlParse(result.data);
//             return { errno: result.result_code === "SUCCESS" ? 0 : -1, errmsg: result.err_code_des || result.return_msg }
//         } else {
//             throw new Error(JSON.stringify(result));
//         }
//
//     }
//
//
// }
